« 前へ |
Articles トップへ | 次へ »
IDA Pro入門 - デコンパイラの使用 -
2019.03.04
前回までは、主に実行可能ファイルを読み込ませてコードを見たり、デバッグを行い命令を1つ1つ実行させながら、どういった処理が行われているのか、その時のレジスタなどの状態がどの様になっているのかを確認するために必要な機能などを紹介しました。
今回は、デコンパイラについてやっていきたいと思います。
デコンパイラは文字通りといったところなのですが、「実行可能ファイルから元の高級言語ベースのソースコードを再現する」という処理を行います。コンパイラの処理とは逆方向の処理といった感じです。
デコンパイラはIDA Proのオプションになるため、別途購入が必要です。ですが、デコンパイラがあると非常に便利です。
現状で用意されているデコンパイラの種類は、以下のアーキテクチャに対応したものになります。
・x86, x64
・ARM32, ARM64(v8.3)
・PowerPC
IDA Proをそのまま使って解析を行うのもいいのですが、
・アセンブリ命令がある程度読める必要がある
・高級言語ベースのコードよりアセンブリベースのコードのほうが、コードの量が多い
・コードの量が多い中で解析作業を行うのは、なれていてもしんどい
・処理の全体像を把握するのに時間がかかる
といったことがあります。そういったときにデコンパイラを使うことで、解析者の苦労をかなり軽減してくれます。
IDA Proのデコンパイラは、C言語ベースのコードに変換を行ってくれます。C言語のコードになれている方であれば、実行可能ファイルの解析作業が非常に楽になります。
変換を行う際には、「View」から
「Open
subview」、「Generate Pseudocode」の順で操作します。ショートカットキーもありF5キーを押すことで変換を行うことが可能です。
この操作を行うと、Disassembly viewの画面の部分に「Pseudocode-A」が表示され、そこに現在選択されている処理をデコンパイルした結果が表示されます。
今のこの画面だと、ちょうどmain関数部分のコードをデコンパイルして、main関数のC言語ベースのコードを表示しています。
main関数内ではさまざまな関数が使われていることがわかります。呼ばれている関数のうち、たとえばsub_0x40A690という関数が見えるかと思います。
sub_0x40A690のデコンパイルされたコードを見たいときには、sub_0x40A690のコードをダブルクリックします。すると、main関数からsub_0x40A690の関数内に移動してコードを表示してくれます。
このように、Pseudocodeの画面上で特定の関数をダブルクリックすると、その関数の内部処理についてもデコンパイルされた状態で見ることができます。
また、main関数内で使用されている変数についても、その変数をマウスオーバーすることで、その変数がどのような型なのかなどの情報を知ることができます。
上記では、構造体変数であるSystemTimeをマウスオーバーしています。マウスオーバーすると、構造体変数の型やメンバーの情報などを表示してくれます。変数の型などを確認したい際に、わざわざ変数を宣言していることろに移動しなくても、マウスオーバーすることで簡単に確認することができます。
加えて、Pseudocode画面上のコードにF2などでブレークポイントをはり、デバッグすることも可能です。その際、デコンパイルされたコードとアセンブリコード両方を見ながらデバッグ作業を行うことも可能です。
メニューバーの「Edit」
にある「Plugins」で現在IDAに搭載されているプラグインの一覧を確認することができます。今回使用したデコンパイラのライセンスなどの情報については、「Hex-Rays Decompiler」で確認することができます。
この画面では、ユーザーマニュアルやデコンパイラの設定情報などを確認・変更することができます。
ユーザーズマニュアルを確認したい場合には、「User manual」のボタンをクリックします。Hex-raysのWebサイトにアクセスして、Webブラウザ上でマニュアルを確認することができま。
また、設定情報を確認・変更する際には「Options」のボタンをクリックします。
最初の画面では、主に画面の色の設定などを行うことができます。
そして、画面の中段あたりにある「Analysis Options」のボタンをクリックすることで、アセンブリコードをデコンパイルする際の設定を確認することが可能です。
このような形で、デコンパイラを使っていくことになります。
今回はデコンパイラの操作などを簡単に紹介していきました。
次回は、最終回として、プラグインの使い方などについて説明していきたいと思います。